﻿using System;

namespace csharp索引器
{

    class Person
    {
        string name;
        string sex;
        string age;
        string hobby;

        //person 构造函数
        public Person(string name, string sex, string age, string hobby)
        {
            this.name = name;
            this.sex = sex;
            this.age = age;
            this.hobby = hobby;
        }



        //索引器--访问类中成员

        public string this[int index]
        {
            get//get 是个方法
            {
                switch (index)
                {
                    case 0:
                        return name;
                    case 1:
                        return sex;
                    case 2:
                        return age;
                    case 3:
                        return hobby;

                    default:
                        //throw 扔 小标号 超出 范围的 异常
                        //-----在函数中抛出异常的方法-----实例化
                        //用throw关键字---一旦抛出异常，程序就会终止在抛出异常的地方
                        throw new IndexOutOfRangeException();
                        Console.WriteLine("下标号超出范围");
                        return "";


                }
            }

            set
            {
                switch (index)
                {
                    case 0:
                        name = value; break;
                    case 1:
                        sex = value; break;
                    case 2:
                        age = value; break;
                    case 3:
                        hobby = value; break;

                    default:
                        //throw 扔 小标号 超出 范围的 异常
                        //-----在函数中抛出异常的方法-----实例化
                        //用throw关键字---一旦抛出异常，程序就会终止在抛出异常的地方
                        throw new IndexOutOfRangeException();
                        Console.WriteLine("下标号超出范围");
                        break;
                }
            }
        }


        class Program
        {
            static void Main(string[] args)
            {


                #region 索引器概念
                //索引器
                //类似于属性，可以使类的成员可以被快速访问
                //使用一个或多个参数，可以索引到类中的成员
                //先声明，后使用
                //访问修饰符 数据类型 this[数据类型 索引参数]
                //{
                //    get{return}//读
                //    set{字段=value}//写
                //}
                #endregion

                Person p = new Person("小明", "男", "17岁", "爱好打篮球");
                p[3] = "看电影";
                Console.WriteLine(p[3]);


                #region 重载运算符
                //运算符

                //C#通过使用operator关键字定义静态成员函数
                //来允许用户定义的类型重载运算符。
                //不过并非所有运算符都可以进行重载，
                //并且其他运算符具有限制

                //operator 关键字
                //重载运算符
                //让我们定义的数据类型可以通过运算符进行运算
                //先声明 后使用
                //访问修饰符 static 返回类型 operator 运算符(参数)
                //{ 运算符以及返回结果 }
    
                #endregion
            }
        }
    }
}
